home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / oscar / rendezvous / proxy.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  3KB  |  65 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from util import Packable, Storage, to_hex
  5. import struct
  6. import oscar.capabilities as capabilities
  7. from oscar.OscarUtil import tlv
  8. from logging import getLogger
  9. log = getLogger('rdv.proxy')
  10. info = log.info
  11.  
  12. class ProxyHeader(Packable):
  13.     version = 1098
  14.     fmt = ('length', 'H', 'version', 'H', 'command', 'H', 'null', 'I', 'flags', 'H')
  15.     invars = [
  16.         (lambda o: o.version == ProxyHeader.version)]
  17.     commands = Storage(error = 1, initsend = 2, ack = 3, initreceive = 4, ready = 5)
  18.     
  19.     def initsend(cls, screenname, cookie):
  20.         return make_proxy_init(screenname, cookie)
  21.  
  22.     initsend = classmethod(initsend)
  23.     
  24.     def initreceive(cls, screenname, cookie, port):
  25.         return make_proxy_init(screenname, cookie, port)
  26.  
  27.     initreceive = classmethod(initreceive)
  28.  
  29. SENDFILE = capabilities.by_name['file_xfer']
  30. _send_file_tlv = tlv(1, SENDFILE)
  31.  
  32. def make_proxy_init(sn, cookie, port = None):
  33.     if not isinstance(sn, str):
  34.         raise TypeError('screenname must be a str object')
  35.     
  36.     if isinstance(cookie, long):
  37.         cookie = struct.pack('!Q', cookie)
  38.     
  39.     command = None if port else 'initsend'
  40.     length = len(sn) + 41
  41.     if port is None:
  42.         length -= 2
  43.     
  44.     info(command + ' length: %d', length)
  45.     data = ProxyHeader(length, ProxyHeader.version, ProxyHeader.commands[command], null = 0, flags = 0).pack()
  46.     data += struct.pack('B', len(sn)) + sn
  47.     if port:
  48.         data += struct.pack('!H', port)
  49.     
  50.     fullpacket = data + cookie + _send_file_tlv
  51.     log.info_s('proxy packet assembled (%d bytes): %s', len(fullpacket), to_hex(fullpacket))
  52.     return fullpacket
  53.  
  54.  
  55. def unpack_proxy_ack(data):
  56.     (ack, data) = ProxyHeader.unpack(data)
  57.     (ack.port, ack.ip) = struct.unpack('!HI', data)
  58.     return ack
  59.  
  60.  
  61. def unpack_proxy_ready(data):
  62.     (ready, data) = ProxyHeader.unpack(data)
  63.     return ready
  64.  
  65.